perm filename LOOP.FAI[XX,LCS]3 blob
sn#185017 filedate 1975-11-04 generic text, type T, neo UTF8
00100 TITLE LOOP ; SUBROUTINE LOOP(I,J,L,M,N)
00200 ENTRY LOOP,FINDIT,PLACE,DPYNEW,MVBEAM,MVBX,JUGGLE,XNOTE,BAUTO
00300 ENTRY SORT2,UPDATE,NEWR,MSSLUP,LUP2,HOMER,FSCAN
00400 EXTERNAL ACCPOG,DPYOUT,.COMM.,XRN,AMOD,PTR,KJY,DPY,DL,SCM
00500 EXTERNAL SC,SCX,RRJJ,STF,ALF,POSI
00600 DEFINE FIXX(N)
00700 < JUMPGE N,.+5
00800 MOVNS N
00900 FIX N,233000
01000 MOVNS N
01100 CAIA
01200 FIX N,233000 > ; TO FIX IT LIKE 'IFIX' DOES.
01300 ; DIMENSION N(1)
01400 MM←1 ↔ NN←2 ↔ J←3
01500 LOOP: 0 ; DO 1 NN=I+L,J+L,K
01600 MOVE 1,@4(16)
01700 SUB 1,@3(16) ; MM IS IN 1
01800 MOVE 2,@(16)
01900 ADD 2,@3(16) ;I+L -- NN, 1ST TIME
02000 MOVE 3,@1(16)
02100 ADD 3,@3(16) ;J+L
02200 MOVE 4,@2(16) ;K
02300 HRRZI 5,@5(16) ; ADR. OF N
02400 ADDI 2,-1(5) ; N(NN)
02500 ADDI 3,-1(5)
02600 JUMPL 4,LP3 ; JUMP IF NEG. INCR.
02700 HRRM 1,.+1 ; ADD IN MM
02800 LP1: MOVE 6,(2)
02900 MOVEM 6,(2) ;N(NN)=N(NN+MM)
03000 CAIGE 2,(3)
03100 AOJA 2,LP1
03200 JRA 16,6(16)
03300 LP3: HRRM 1,.+1
03400 LP2: MOVE 6,(2) ;NEG. INCR.
03500 MOVEM 6,(2)
03600 CAILE 2,(3)
03700 SOJA 2,LP2
03800 JRA 16,6(16) ; END
03900
04000 PLACE: 0 ; FUNCTION PLACE(X)
04100 ; COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/XRN/RN(4000)
04200 ; EQUIVALENCE (R11,RJQ(9)),(RD,RN(4000))
04300 MOVN 2,@(16) ; PLACE=R11-ABS(RD-X)
04400 FADR 2,XRN+=3999 ;END
04500 MOVMS 2
04600 MOVE 0,.COMM.+=12 ;R11
04700 FSBR 0,2
04800 JRA 16,1(16)
04900
05000 FINDIT: 0 ; FUNCTION FINDIT(N)
05100 SETZ ; COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
05200 HRRZ 1,@(16) ; COMMON /XRN/RN(4000) /PTR/PWDS(250),ITEM,L,I,IX
05300 ;; HRRZI 2,PTR ; FINDIT=0
05400 ;; ADDI 1,(2) ; L=PWDS(N)
05500 ;; MOVE 2,-1(1) ; IF(RN(L+1).NE.1)GO TO 377
05600 ;; FIXX(2) ; IF(RN(L+2).EQ.R2)RETURN
05800 ;; HRRZI 3,XRN ;377 FINDIT=-1
05900 ;; ADDI 3,(2) ; END
06000 ;; MOVE 5,(3) ; RN(L+1)
06010 MOVE 2,PTR-1(1) ;THESE 3 REPLACE ABOVE
06020 ;X FIXX(2)
06030 MOVE 5,XRN(2)
06100 CAME 5,[1.0]
06200 JRST FNEG
06210 MOVEM 2,PTR+=251 ; SENDS BACK A NUM IN L
06300 ;; MOVE 5,1(3) ;RN(L+2)
06310 MOVE 5,XRN+1(2)
06400 CAME 5,.COMM.
06500 FNEG: SETO
06600 JRA 16,1(16)
06700
06800 DPYNEW: 0 ; SUBROUTINE DPYNEW
06900 JSA 16,ACCPOG ; COMMON/DPY/ST(4000),WDS(250),MEDIT,IGO
07000 JUMP [1] ; CALL ACCPOG(1)
07100 MOVE 2,DPY+=4251 ; IF(IGO.GT.0)RETURN
07200 JUMPG 2,DB ; CALL DPYOUT(1)
07300 JSA 16,DPYOUT ; END
07400 JUMP [1]
07500 DB: JRA 16,(16)
07600
07700 MVBEAM: 0 ;C THESE MOVE ENDS OF PARTIAL INNER BEAMS.
07800 HRRZ 2,(16) ; SUBROUTINE MVBEAM(R,I,JY,L,W)
07900 MOVE 5,@1(16) ; I
08000 ADD 2,5 ;C L AND JY ARE FOR MOVES TO DIFF. STAFF.
08100 ADD 2,@2(16) ; DIMENSION R(1)
08200 MOVE 3,-1(2) ; Y=R(JY+I)
08300 MOVM 4,3 ; Z=ABS(Y)
08400 CAMGE 4,[=100.0] ; IF(Z.LT.100.)GO TO 1
08500 JRST MV1
08600 CAML 5,[6]
08700 JRST MV1 ; IF(I.GT.5)GO TO 1
08800 ;C NEXT FOR MINIS, DIAMONDS, 'X' NOTES. (LIMIT OF +-99 ON ALTITUDE.)
08900 JSA 16,AMOD ; Y=AMOD(Y,100.)
09000 JUMP 3
09100 JUMP [=100.0] ; 0 HAS Y
09200 MOVE 5,@4(16) ; X=Y+W
09300 FADR 5,0
09400 MOVM 6,5 ; Z=Z-ABS(Y)+ABS(X)
09500 MOVM 7,0 ;C PUTS ALL INTO POSITIVE
09600 FSBR 4,7
09700 FADR 4,6
09800 SKIPGE 5 ; IF(X)Z=-Z
09900 MOVNS 4 ; Z
10000 JRST MV2 ; GO TO 2
10100 MV1: FADR 3,@4(16) ;1 Z=Y+W
10200 MOVE 4,3 ; Z NOW IN 4
10300 MV2: HRRZI 3,@(16) ;2 R(L+I)=Z
10400 ADD 3,@3(16)
10500 ADD 3,@1(16)
10600 MOVEM 4,-1(3) ; PUT IT IN R(L+I)
10700 JRA 16,5(16) ; END
10800
10900 MVBX: 0 ; SUBROUTINE MVBX(I)
11000 ; COMMON R2,JA,CENTR,J2,RJQ(20),L,RDIS,JQ(18)/KJY/K,JY/XRN/R(4000)
11100 MOVE 2,@(16) ; EQUIVALENCE (R4,RJQ(2)),(R8,RJQ(6))
11200 ADD 2,KJY+1 ; R(L+I)=R8+(R(JY+I)-R4)*RDIS
11300 ;; HRRZI 4,XRN
11400 ;; ADDI 2,(4)
11500 ;; MOVE 3,-1(2) ; R(JY+I)
11510 MOVE 3,XRN-1(2)
11600 FSBR 3,.COMM.+5
11700 FMPR 3,.COMM.+=25 ; *RDIS
11800 FADR 3,.COMM.+=9 ; +R8
11900 MOVE 2,@(16)
12000 ADD 2,.COMM.+=24 ; + L
12100 ;; ADDI 2,(4)
12200 ;; MOVEM 3,-1(2) ;R(L+I)
12210 MOVEM 3,XRN-1(2)
12300 JRA 16,1(16)
12400
12500 JUGGLE: 0 ; SUBROUTINE JUGGLE
12600 ; IMPLICIT INTEGER(A-Z)
12700 ; REAL PWDS,RN
12800 ; COMMON /DL/X22,SAVER,NAME /XRN/RN(4000)
12900 ; COMMON/PTR/PWDS(250),ITEM,L,I,IX/DPY/ST(4000),WDS(250),MEDIT,IGO
13000 SOS PTR+=250 ;ITEM=ITEM-1
13100 HRRZI 15,XRN ; JX=RN(MEDIT)+3 WD CNT OF OLD ITEM
13200 ;C I-IX IS WD CNT OF NEW ITEM
13300 ADD 15,DPY+=4250
13400 MOVE 14,-1(15)
13500 FIXX(14)
13600 ADDI 14,3 ; JX
13700 MOVE 13,PTR+=253 ;JY=IX
13800 MOVE 11,PTR+=252 ; I
13900 SUB 11,13
14000 SUB 11,14 ;Z=I-IX-JX SPACE CHANGE
14100 JUMPL 11,J2751 ;IF(Z)2751,172,751
14200 JUMPE 11,J172
14300 MOVE 5,PTR+=252 ;751 CALL LOOP(I-1,MEDIT+JX,-1,Z,0,RN)
14400 SUBI 5,1
14500 MOVE 10,DPY+=4250
14600 ADD 10,14
14700 JSA 16,LOOP
14800 JUMP 5
14900 JUMP 10
15000 JUMP [-1]
15100 JUMP 11
15200 JUMP [0]
15300 JUMP XRN
15400 ADD 13,11 ;JY=IX+Z
15500 JRST J172 ;GO TO 172
15600 J2751: ADD 14,DPY+=4250 ;2751 CALL LOOP(MEDIT+JX+Z,IX+Z-1,1,0,-Z,RN)
15700 ADD 14,11
15800 MOVE 5,11
15900 ADD 5,PTR+=253
16000 SOJ 5,
16100 MOVN 10,11
16200 JSA 16,LOOP
16300 JUMP 14
16400 JUMP 5
16500 JUMP [1]
16600 JUMP [0]
16700 JUMP 10
16800 JUMP XRN
16900 ;;J172: HRRZI 12,XRN ; 172 J=RN(JY)+2
17000 ;; ADDI 12,(13) ; JY
17050 J172: MOVE 12,XRN-1(13)
17100 ;; MOVE 12,-1(12) ;RN(JY)
17200 FIXX(12)
17300 ADDI 12,2 ; J IS IN 12
17400 JSA 16,LOOP ;CALL LOOP(0,J,1,MEDIT,JY,RN)
17500 JUMP [0]
17600 JUMP 12
17700 JUMP [1]
17800 JUMP DPY+=4250 ; MEDIT
17900 JUMP 13 ; JY
18000 JUMP XRN
18100 MOVE 12,PTR+=253 ; I=IX+Z
18200 ADD 12,11 ; Z IS IN 11
18300 MOVEM 12,PTR+=252
18400 MOVE 12,PTR+=250 ; 1751 X=ITEM+1
18500 AOJ 12, ; X IS IN 12
18600 HRRZI 13,DPY+=4000 ; JX=WDS(X22+1)-WDS(X22)
18700 ADD 13,DL
18800 MOVE 14,(13) ; WDS(X22+1) IN 14 ADR. WDS(X22) IN 13
18900 SUB 14,-1(13) ;JX IN 14
19000 HRRZI 10,DPY+=4000 ; J=WDS(X+1)-WDS(X)
19100 ADDI 10,(12)
19200 MOVE 7,(10) ;WDS(X+1)
19300 SUB 7,-1(10) ;J IN 7
19400 MOVEM 7,MVBX ; STORE J
19500 SUB 7,14 ; Y=J-JX
19600 MOVE 14,-1(10) ; JX=WDS(X)+Y+1
19700 ADD 14,7
19800 AOJ 14, ; JX IN 14
19900 JUMPL 7,J2851 ; IF(Y)2851,182,282
20000 JUMPE 7,J182
20100 MOVE 15,(10) ;282 CALL LOOP(WDS(X+1)+2,WDS(X22),-1,Y,0,ST)
20200 ADDI 15,2 ; ARG 1
20300 MOVE 6,-1(13) ; ARG 2
20400 JSA 16,LOOP
20500 JUMP 15
20600 JUMP 6
20700 JUMP [-1]
20800 JUMP 7 ; Y
20900 JUMP [0]
21000 JUMP DPY
21100 JRST J182 ; GO TO 182
21200 J2851: MOVE 14,(13) ;2851 CALL LOOP(WDS(X22+1)+Y+1,WDS(X)+Y+1,1,0,-Y,ST)
21300 ADD 14,7 ;+Y
21400 ADDI 14,1 ; ARG 1
21500 MOVE 5,-1(10) ;WDS(X)
21600 ADD 5,7
21700 ADDI 5,1 ; ARG 2
21800 MOVNM 7,MVBEAM ; -Y IS STORED
21900 JSA 16,LOOP
22000 JUMP 14
22100 JUMP 5
22200 JUMP [1]
22300 JUMP [0]
22400 JUMP MVBEAM
22500 JUMP DPY
22600 MOVE 14,-1(10) ; WDS(X) JX=WDS(X)+1
22700 ADDI 14,1 ; JX IN 14
22800 J182: MOVE 5,-1(13) ;182 CALL LOOP(1,J,1,WDS(X22)+1,JX,ST)
22900 ADDI 5,1 ;WDS(X22)+1
23000 JSA 16,LOOP
23100 JUMP [1]
23200 JUMP MVBX
23300 JUMP [1]
23400 JUMP 5
23500 JUMP 14
23600 JUMP DPY
23700 MOVE 2,DL ; DO 183 K=X22+1,X
23800 ;; HRRZI 5,DPY+=4000 ; 183 WDS(K)=WDS(K)+Y
23900 ;; ADD 5,2
24000 HRRZI 3,PTR
24100 ADDI 3,(2)
24200 ;; TLC 11,232000 ; FLOAT Z
24300 ;; FADR 11,11
24400 J183: JUMPE 11,J184 ;IF(Z.EQ.0)GO TO 184
24500 MOVE 4,(3)
24600 ;; FADR 4,11 ; ADD Z
24650 ADD 4,11
24700 MOVEM 4,(3) ; PWDS(K)=PWDS(K)+Z
24800 AOJ 3, ;UPDATE PWDS AND WDS
24900 J184: JUMPE 7,J185
25000 MOVE 6,(13)
25100 ADD 6,7
25200 MOVEM 6,(13)
25300 ADDI 13,1
25400 J185: CAIGE 2,(12)
25500 AOJA 2,J183
25600 ;; HRRZI 2,DPY+=4000 ;ST(2)=WDS(X)
25700 ;; ADDI 2,(12) ;WDS(X+1) ADR.
25800 ;; MOVE 2,-1(2)
25850 MOVE 2,DPY+=3999(12)
25900 ;; HRRZI 3,DPY
26100 ;; MOVEM 2,1(3)
26150 MOVEM 2,DPY+1
26200 SETZM DL ;X22=0
26300 JRA 16,(16)
26400
26500 SORT2: 0 ;SUBROUTINE SORT2(RPOS,M)
26600 MOVEI 2,2 ;DIMENSION RPOS(2,200)
26700 S3: MOVE 6,2 ;(K=L HERE)
26800 SETO 11, ;L=2
26900 HRRZI 3,@(16) ;3 J=-1
27000 MOVE 4,2 ;RX=RPOS(1,L-1)
27100 SUBI 4,1 ;L-1
27200 IMULI 4,2
27300 ADDI 4,(3)
27400 MOVE 5,-2(4) ;RX
27500 S2: MOVE 7,6 ; DO 2 K=L,M
27600 ;; LSH 7,1 ;IF(RPOS(1,K).GE.RX)GO TO 2
27700 IMULI 7,2 ;IF(RPOS(1,K).GE.RX)GO TO 2
27800 ADDI 7,(3)
27900 CAMG 5,-2(7)
28000 JRST S1 ; CONTINUE
28100 MOVE 5,-2(7) ; RX=RPOS(1,K)
28200 ;;C WHY WERE ALL THE RX'S JX ????? 9/6/73
28300 MOVE 11,6 ;J=K
28400 S1: CAMGE 6,@1(16) ;2 CONTINUE
28500 AOJA 6,S2
28600 JUMPL 11,S4 ;IF(J)GO TO 4
28700 MOVE 12,2 ;K=L-1
28800 SOS 12
28900 IMULI 12,2 ;(K*2)
29000 ADD 12,3 ;CALL EXCH(RPOS(1,K),RPOS(1,J))
29100 MOVE 10,-2(12)
29200 ;; LSH 11,1 ;MULTS BY 2 (LEFT SHIFT)
29300 IMULI 11,2
29400 ADD 11,3
29500 EXCH 10,-2(11)
29600 MOVEM 10,-2(12)
29700 MOVE 10,-1(12) ;CALL EXCH(RPOS(2,K),RPOS(2,J))
29800 EXCH 10,-1(11)
29900 MOVEM 10,-1(12)
30000 S4: CAMGE 2,@1(16) ;4 L=L+1
30100 AOJA 2,S3 ;IF(L.LE.M)GO TO 3
30200 JRA 16,2(16) ;END
30300
30400 XNOTE: 0 ;FUNCTION XNOTE(J)
30500 MOVE 3,@(16) ;COMMON/XRN/RN(4000)
30600 IMULI 3,12 ;DIMENSION R(10,80)
30700 ;; ADDI 3,XRN+=2993 ;EQUIVALENCE (R,RN(3001))
30800 ;; MOVE 2,(3) ;XNOTE=AMOD(R(4,J),100.)
30850 MOVE 2,XRN+=2993(3)
30900 JSA 16,AMOD
31000 JUMP 2
31100 JUMP [=100.0]
31200 JRA 16,1(16) ;END
31300
31400 BAUTO: 0 ; SUBROUTINE BAUTO(J,L,K,N)
31500 MOVE 2,@(16) ;C FOR AUTOMATIC BEAMS.
31600 ADDI 2,2 ;COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
31700 MOVEM 2,@(16) ;J=J+2
31800 MOVE 3,@3(16)
31900 MOVE 4,@1(16)
32000 SUB 4,3 ;L-N
32100 MOVE 5,@2(16)
32200 SUB 5,3 ;K-N
32300 ;; HRRZI 6,SCM
32400 ;; ADDI 6,(2)
32500 TLC 4,232000
32600 FADR 4,4 ;FLOATS IT
32700 ;; MOVEM 4,-2(6) ;V(J-1)=L-N
32750 MOVEM 4,SCM-2(2)
32800 TLC 5,232000
32900 FADR 5,5 ;FLOATS IT
33000 ;; MOVEM 5,-1(6) ;V(J)=K-N
33050 MOVEM 5,SCM-1(2)
33100 JRA 16,4(16)
33200
33300 UPDATE: 0 ; SUBROUTINE UPDATE(I)
33400 ;; HRRZI 3,XRN ;COMMON /PTR/PWDS(250),ITEM,LL,IS,IX /XRN/RN(4000)
33500 ;; ADD 3,PTR+=252 ;RN(IS)=I
33550 MOVE 3,PTR+=252
33600 MOVE 2,@(16)
33700 TLC 2,232000 ;FLOAT I
33800 FADR 2,2
33900 ;; MOVEM 2,-1(3)
33950 MOVEM 2,XRN-1(3)
34000 ;; MOVE 2,PTR+=252
34100 ;; ADD 2,@(16)
34200 ;; ADDI 2,3
34300 ;; MOVEM 2,PTR+=252 ;IS=IS+I+3
34310 MOVE 2,@(16)
34320 ADDI 2,3
34330 ADDM 2,PTR+=252
34400 JRA 16,1(16)
34500
34600 JK←3 ↔JT←4 ↔IEND←5 ↔A←6 ↔K←7↔ IS←10↔ IZ←11↔ R←12↔ L←13
34700 IK: 0
34800 JIT: 0 ; THESE ARE TO STORE PNTRS IN LOOP
34900 NEWR: 0 ; SUBROUTINE NEWR
35000 MOVE A,SC+=70 ;COMMON/PTR/PWDS(250),ITEM,LL,IS,IX
35100 CAIE A,1 ;COMMON/XRN/RN(4000)
35200 JRST N1 ;COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
35300 MOVE JK,PTR+=252;COMMON/SCX/RHY(4),JALPHA(22),JX,U,JZ,IRHY,J4,KA,KB,IZ
35400 MOVEM JK,IK ;1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
35500 MOVE JT,PTR+=250 ;1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
35600 MOVEM JT,JIT ;DIMENSION R(10,80)
35700 N1: MOVE IS,IK ;EQUIVALENCE (R,RN(3001))
35800 MOVEM IS,PTR+=252
35810 MOVE 14,[9999.0]
35900 MOVE JT,JIT ;IF(MODE.NE.1)GO TO 1
36000 ADDI JT,1 ;IK=IS
36100 MOVEM JT,PTR+=250 ;JIT=ITEM
36200 MOVEI K,=10 ;1 IS=IK
36300 MOVE IZ,SCX+=33 ;ITEM=JIT+1
36400 IMULI IZ,=10 ;MODE 1=NOTE, 2=RHYTH, 3=ACCENTS, 4=BEAMS, 5=SLURS.
36500 ;;N2: HRRZI R,XRN+=2997 ;DO 2 K=1,IZ
36510 ;;;;N2: MOVE R,XRN+=2997(K) ;DO 2 K=1,IZ
36600 ;; ADD R,K ;IF(R(8,K).EQ.9999.)GO TO 2
36700 ;; MOVE R,(R)
36800 ;;;; CAMN R,[=9999.0]
36850 N2: CAMN 14,XRN+=2997(K)
36900 JRST NN2 ;SKIPS INVIS RESTS - ONLY NEEDED IN RHYTH.
37000 SETO IEND, ;C JUMP FOR BEAM CONT.
37100 ;; HRRZI L,XRN ;IEND=-1
37200 ;; ADD L,PTR+=252 ;RN(IS+3)=0
37300 ;; SETZM 2(L)
37400 ;; SETZM 1(L) ;RN(IS+2)=0
37410 MOVE L,PTR+=252
37420 SETZM XRN+2(L)
37430 SETZM XRN+1(L)
37500 MOVEI L,=9 ;C ↑↑↑↑ TO CLEAR ARRAY FOR SHORT ITEMS (CLEFS)
37600 ;;N3: HRRZI R,XRN+=3000 ;DO 3 L=9,1,-1
37610 N3: HRRZI R,XRN+=3000(K) ;DO 3 L=9,1,-1
37700 ;; ADDI R,(K) ;A=R(L,K)
37800 ADDI R,(L)
37900 MOVE A,-13(R) ;(OCTAL)=-11
38000 JUMPGE IEND,NX4 ;IF(A.NE.0)GO TO 77
38100 JUMPN A,NX3 ;IF(IEND)GO TO 3
38200 JRST NN3
38300 NX3: MOVE IEND,L ;77 IF(IEND)IEND=L
38400 ;;NX4: HRRZI R,XRN
38500 ;; ADD R,PTR+=252 ;RN(IS+L)=A
38600 ;; ADDI R,(L)
38700 ;; MOVEM A,-1(R)
38710 NX4: MOVE R,PTR+=252
38720 ADDI R,(L)
38730 MOVEM A,XRN-1(R)
38800 NN3: CAILE L,1 ;3 CONTINUE
38900 SOJA L,N3
39000 CAIGE IEND,3
39100 MOVEI IEND,3
39200 MOVE 15,IEND ;IF(IEND.LT.3)IEND=3
39300 SUBI 15,2
39400 JSA 16,UPDATE ;CALL UPDATE(IEND-2)
39500 JUMP 15
39600 NN2: CAML K,IZ ;2 CONTINUE
39700 JRA 16,(16) ;END
39800 ADDI K,=10
39900 JRST N2
40000
40025 CNT: 0
40050 MSSLUP: 0
40100 SETZ 1, ;161 CNT=1
40150 SETZ 2,
40200 L5543: MOVE 3,.COMM.+4(2) ;DO 5543 K=1,9
40300 ;; ADDI 3,(2)
40400 ;; MOVE 3,(3) ;RA=RJQ(K)
40500 SKIPE 3 ;IF(RA.NE.0)CNT=K
40550 MOVE 1,2
40600 ;; MOVEI 4,RRJJ+1 ;5543 RJJ(K)=RA
40700 ;; ADDI 4,(2)
40800 ;; MOVEM 3,(4)
40810 MOVEM 3,RRJJ+1(2)
40900 CAIG 2,7 ; LOOP BACK?
41000 AOJA 2,L5543
41100 AOJ 1,
41200 MOVEM 1,CNT ;REMEMBERS CNT
41300 JRA 16,(16)
41400
41500 LUP2: 0
41600 ;; MOVEI 1,XRN ;261 RN(I)=CNT
41650 ;; ADD 1,PTR+=252
41675 MOVE 2,CNT
41680 TLC 2,232000
41690 FADR 2,2 ;FLOATS IT
41695 ;; MOVEM 2,-1(1)
41697 MOVE 1,PTR+=252
41698 MOVEM 2,XRN-1(1)
41700 MOVE 2,.COMM.+1 ;RN(I+1)=JA
41710 TLC 2,232000
41720 FADR 2,2
41730 ;; MOVEM 2,(1)
41800 ;; MOVE 2,PTR+=252 ;I=I+2
41810 ;; ADDI 2,2
41820 ;; MOVEM 2,PTR+=252
41830 MOVEM 2,XRN(1)
41840 ADDI 1,2
41850 MOVEM 1,PTR+=252
41900 MOVE 3,.COMM. ;RN(I)=R2
41910 ;; MOVEM 3,1(1)
41920 MOVEM 3,XRN-1(1)
42000 ;; NOT USED NOW! IF(RD.NE.0)RN(I)=RD
42100 ;;C TO SAVE NOTE NUMBS IN P2.
42200 SETZ 5, ;DO 4554 K=1,CNT
42205 L4554: MOVE 2,.COMM.+4(5)
42210 ;;L4554: MOVEI 2,.COMM.+4 ;(RJQ)
42220 ;; ADDI 2,(5)
42230 ;; MOVE 2,(2)
42235 ;; MOVEI 3,XRN(5)
42237 ;; ADDI 3,(5)
42240 ;; ADD 3,PTR+=252
42300 ;; MOVEM 2,(3) ;4554 RN(I+K)=RJQ(K)
42305 MOVE 3,1
42307 ADDI 3,(5)
42308 MOVEM 2,XRN(3)
42310 AOJ 5,
42320 CAME 5,CNT
42330 JRST L4554
42340 AOJ 5,
42350 ;; ADD 5,PTR+=252
42360 ADDM 5,PTR+=252
42400 ;; MOVEM 5,PTR+=252 ;3554 I=CNT+1+I
42410 JRA 16,(16)
42420
43000 RC←14 ↔ NX←15 ;**** AC'S 0,1,2,3,5 ARE USED IN 'PLACE' & 'FINDIT'!!
43100 ;;C****** FOR 'HOMING' OF BEAMS AND CHORD NOTES ***********
43200 ;; SUBROUTINE HOMER
43300 ;; IMPLICIT INTEGER(A-Q,S-Z)
43400 ;; REAL PWDS,DISX,A,B,PLACE,STFF
43500 ;; COMMON /STF/RSTFAC(-3/4),RSTJ2
43600 ;; COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20) /POSI/STFF(-3/4),JJ2,POS
43700 ;; COMMON /XRN/RN(4000) /PTR/PWDS(250),ITEM,L,I,IX
43800 ;; COMMON/ALF/QQ(3),K,RA,RB,N,RG,M,X,RE,RF,A,B,DISX,INP(58)
43900 ;; EQUIVALENCE (R3,RJQ(1)),(R6,RJQ(4)),(J11,JQ(9)),(RD,RN(4000))
44000 ;; 1,(R7,RJQ(5)),(R9,RJQ(7)),(R11,RJQ(9)),(R13,RJQ(11))
44100 ;; 1,(J10,JQ(8)),(R8,RJQ(6)),(J7,JQ(5))
44200 HOMER: 0 ; IF(JA.EQ.6)GO TO 9
44300 MOVE MM,.COMM.+1
44400 CAIN MM,6
44500 JRST H9
44600 SKIPE .COMM.+=14 ;IF(R13.NE.0)GO TO 10
44700 JRST H10 ; FOR GENL HOMING; WORDS; BEAMS; STEMS;
44800 SKIPN .COMM.+=24 ;IF(JQ(1).EQ.0)GO TO 197
44900 JRST H197 ; TO HOME IN ON NOTE ON DIFFERENT STAFF.
45000 MOVE K,.COMM. ;JJ2=R2
45100 FIXX(K)
45200 MOVEM K,POSI+=8 ; JJ2 FOR RUNTHR
45300 MOVE K,PTR-1(K) ;K=PWDS(JJ2) ← BEAM PTR.
45350 ;X FIXX(K)
45550 MOVE L,.COMM.+=24
45600 MOVE L,PTR-1(L) ;L=PWDS(JQ(1)) ← NOTE PTR.
45620 ;X FIXX(L)
45700 MOVEI JT,XRN(K) ;RA=RN(K+3)
45800 ;; ADDI JT,(K)
45900 MOVEM JT,UPDATE ;SAVE LOC OF RN(K+1)
46000 MOVE IS,2(JT)
46100 MOVEM IS,JIT ;RA SAVED IN JIT
46200 MOVEI JK,XRN(L) ;RB=RN(L+3)
46300 ;; ADDI JK,(L)
46310 MOVE RC,3(JK) ; RN(L+4)
46320 MOVE NX,[1.0]
46330 SKIPGE RC
46340 MOVNS RC
46350 CAML RC,[90.0]
46360 MOVE NX,[0.6] ; FOR MINI NOTES AND BEAMS
46400 H400: MOVEM JK,NEWR ;LOC OF RN(L+1)
46500 MOVE IZ,2(JK) ; RB=POS OF NOTE, RA=POS(P3) OF BEAM
46600 MOVEM IZ,IK ; RB SAVED IN IK
46700 SETZM JUGGLE ;N=0
46800 MOVE 0,4(JK) ;IF(RN(L+5).LT.20)N=-1
46900 CAMGE 0,[=20.0]
47000 SETOM JUGGLE ; -1 MEANS STEM IS UP
47100 MOVN 0,6(JT) ;RG=-(AMOD(RN(K+7),10.)-1.)[*NX]*11./7.
47120 MOVEM 0,XNOTE ;RN(K+7)
47140 JSA 16,AMOD
47160 JUMP XNOTE
47180 JUMP [=10.0]
47200 FADR 0,[=1.0]
47220 FMPR 0,[=1.5714]
47240 FMPR 0,NX
47260 MOVEM 0,SORT2 ;RG SAVED IN SORT2
47280 ; SPACE FOR THE NUMB. OF BEAMS
48100 MOVE L,NEWR ;J11=RN(L+2) ←STAFF # OF NOTE
48200 MOVE JT,1(L)
48300 FIXX(JT) ; J11 IS IN JT
48400 SETZ MM, ;M=0
48500 MOVE K,UPDATE ;IF(RN(K+7).LT.20.)M=-1
48600 MOVE JK,6(K) ;RN(K+7)
48700 CAMGE JK,[=20.0]
48800 SETO MM,
48900 MOVE JK,1(K) ;X=RN(K+2) ←STAFF # OF BEAM
49000 FIXX(JK) ; X IS IN JK
49100 ; THE STAFF NUMS. X=BEAM J11=NOTE
49475 MOVE IS,STF+3(JK) ;R3=RSTFAC(X) R3 IS IN 'IS'
49480 FMPR IS,NX
49487 ;; MOVE IZ,STF+3(JT) ;R9=RSTFAC(J11)/R3
49800 ;; FDVR IZ,IS ;R9 IS IN IZ
49900 FMPR IS,[=2.43959732] ;R8=R3*14.54/5.96
50000 ; R8=WIDTH OF NOTE
50100 ;******* 5/74 BOTH STAVES MUST BE SAME SIZE - MOST LIKELY ********
50200 MOVE A,[=13.7142857] ;R7=96./7.
50300 ;C MUST BE DOUBLE STEM LENGTH
50310 FMPR A,NX ; *RMINI
50400 MOVE R,7(L) ;RD=RN(L+8) ← STEM LENGTH
50500 ; THE STEM LENGTH
50510 CAMN R,[=999.0]
50520 SETZM R ;IF(RD.EQ.999)RD=0
50600 CAME MM,JUGGLE ;3 IF(M.NE.N)GO TO 5
50700 JRST H5
50800 SETZ IS, ;R8=0
50900 SETZ A, ;R7=0
51000 SETZM SORT2 ;RG=0
51100 JRST H4 ;GO TO 4
51200 H5: JUMPE MM,H4 ;5 IF(M.EQ.0)GO TO 4
51300 MOVNS A ; R7=-R7
51400 MOVNS IS ;R8=-R8
51500 MOVNS R ;RD=-RD
51600 MOVNS SORT2 ;RG=-RG
51700
51800 ; NOT OK IF DIFF SIZES AND RA.GT.RB ****** 5/74
51900 H4: FADR IS,IK ;4 RN(K+6)=RB+R8
52000 MOVEM IS,5(K) ;SETS CORRECT HORIZONTAL PARAM OF BEAM.
52100 ;; MOVE MM,IZ ;RF=7.*R9
52200 ;; FMPR MM,[=7.0]
52250 MOVE NN,POSI+3(JT)
52850 FSBR NN,POSI+3(JK) ; RE=(STFF(J11)-STFF(X))/RF
52900 FDVR NN,[7.0]
53000 ; DIST BETWEEN STAVES.
53100 FADR A,R ;RN(K+5)=RN(L+4)+RE+(R7+RD+RG)*R9
53200 FADR A,SORT2
53300 ;; FMPR A,IZ
53400 FADR A,NN
53500 FADR A,3(L)
53503 CAMG A,[90.0] ; CHECK FOR NEG. MINI POSITION
53506 JRST .+5
53509 CAML A,[100.0]
53510 JRST .+5
53512 FSBR A,[200.0] ; MAKE 90'S INTO -100'S
53520 JRST .+2
53530 CAMG A,[-80.0]
53540 FADR A,[200.0]
53600 MOVEM A,4(K)
53700 JRA 16,(16) ;RETURN
53800
53900 ; NEXT ADJUSTS STEMS WHEN BEAMS ARE USED.
54000 H197: SETOM POSI+=8 ;197 JJ2=-1
54100 MOVE R,.COMM. ;R3=R2
54200 MOVEM R,JIT
54300 SETZ K, ;DO 191 K=1,ITEM
54400 H191: MOVEM K,LOOP ;SAVE K
54500 ;; MOVEI L,PTR ; L=PWDS(K)
54600 ;; ADDI L,(K)
54650 MOVE L,PTR(K) ; L IS PWDS(K+1)
54700 ;; MOVE L,(L)
54800 ;X FIXX(L)
54900 ;; MOVEI R,XRN ;IF(RN(L+1).NE.6)GO TO 191
54950 MOVEI R,XRN(L)
55000 ;; ADDI R,(L) ;LOC OF RN(L+1)
55100 MOVE A,(R)
55200 CAME A,[=6.0]
55300 JRST HX191
55400 MOVE J,JIT ;IF(RN(L+2).EQ.R3)GO TO 77
55500 CAMN J,1(R)
55600 JRST H77
55700 CAMGE J,[=5.0] ;IF(R3.LT.5.)GO TO 191
55800 JRST HX191 ; TYPE 19 99 FOR ALL STAVES
55900 H77: MOVE J,-1(R) ;77
56000 CAMN J,[=8.0] ;IF(RN(L).EQ.8)GO TO 191
56050 JRST HX191
56100 MOVE J,6(R) ;IF(RN(L+7).LT.10.)GO TO 191
56200 CAMGE J,[=10.0] ;C FINDS BEAMS.
56300 JRST HX191
56400 FDVR J,[=10.0] ;X=RG/10.
56500 FIXX(J) ;C STEM DIRECT.
56600 MOVEM J,IK ;X SAVED IN IK
56700 MOVE J,1(R) ;R2=RN(L+2)
56800 MOVEM J,.COMM. ; USED IN 'FINDIT'
56900 MOVE A,2(R) ;A=RN(L+3)-.01
57000 FSBR A,[=0.01]
57100 MOVEM A,NEWR ;SAVE A IN NEWR
57200 MOVE J,5(R) ;B=RN(L+6)+.01
57300 FADR J,[=0.01] ;C POS 1 AND 2
57400 MOVEM J,BAUTO ;B SAVED IN BAUTO
57500 FSBR J,A ;DISX=B-A
57600 MOVEM J,UPDATE ;DISX SAVED IN UPDATE
57700 ; DISTANCE IN REAL STEPS
57800 MOVEM R,MVBX ;SAVE LOC OF RN(L+1)
57850 MOVE 0,3(R)
57875 MOVEM 0,JUGGLE
57900 JSA 16,AMOD ;RF=AMOD(RN(L+4),100.0)
58000 JUMP JUGGLE
58100 JUMP [=100.0]
58200 MOVEM 0,JUGGLE ; THIS IS RF!!!!
58300 ; NOTE 2
58350 MOVE J,MVBX
58375 MOVE J,4(J)
58387 MOVEM J,MSSLUP
58400 JSA 16,AMOD ;RB=AMOD(RN(L+5),100.0)
58500 JUMP MSSLUP
58600 JUMP [=100.0] ;0 WILL HAVE RB!!!
58700 FSBR 0,JUGGLE
58800 MOVEM 0,SORT2 ;RD SAVED IN SORT2 -- RD=RB-RF
58900 ; HEIGHT
59000 MOVEI NX,1
59100 ;;H192: MOVEM NX,DPYNEW ; DO 192 N=1,ITEM
59200 H192: JSA 16,FINDIT ;IF(FINDIT(N))GO TO 192
59300 ;; JUMP DPYNEW
59350 JUMP NX
59400 JUMPL 0,HX192
59500 MOVEI R,XRN ;IF(RN(L).EQ.8)GO TO 192
59600 ADD R,PTR+=251 ;LOC OF RN(L+1)
59700 MOVE J,-1(R)
59800 CAMN J,[=8.0]
59900 JRST HX192
60000 MOVE J,7(R) ;IF(RN(L+8).EQ.1000.)GO TO 192
60100 CAMN J,[=1000.0]
60200 JRST HX192 ; SKIPS SLASHED GRACE NOTES (P8=1000 OR P10=1)
60300 ; FINDIT IS NEG. IF(RN(L+1).NE.1.OR.RN(L+3))
60400 MOVE A,2(R) ;RC=RN(L+3)
60500 CAMGE A,NEWR ;IF(RC.LT.A)GO TO 192
60600 JRST HX192
60700 CAMLE A,BAUTO ;IF(RC.GT.B)GO TO 192
60800 JRST HX192 ; WHAT'S LEFT IS IN BEAM AREA IF STEM DIR. IS OK.
60900 MOVE J,4(R) ;IF(X.NE.IFIX(RN(L+5)/10.))GO TO 192
61000 FDVR J,[=10.0]
61100 FIXX(J)
61200 CAME J,IK
61300 JRST HX192
61400 FSBR A,NEWR ;RC=RC-A
61500 MOVEM A,MVBEAM ;SAVES RC
61600 MOVEM R,MVBX ;SAVE LOC OF RN(L+1)
61610 MOVE 0,3(R)
61620 MOVEM 0,MSSLUP
61700 JSA 16,AMOD ;193 RE=AMOD(RN(L+4),100.0)
61800 JUMP MSSLUP
61900 JUMP [=100.0]
62000 MOVEM 0,ALF+3 ;RE SAVE HERE
62100 MOVE J,SORT2 ;RC=RD*RC/DISX+RF
62200 FMPR J,MVBEAM ;*RC
62300 FDVR J,UPDATE ;/DISX
62400 FADR J,JUGGLE ;+RF
62500 MOVEM J,MVBEAM ;RC=
62510 MOVE J,MVBX
62520 MOVE J,6(J) ;RG=RN(L+7)
62700 MOVEM J,ALF+4 ;SAVE RG
62800 JSA 16,AMOD ;RN(L+7)=RG-AMOD(RG,10.0)+AMOD(RG,1.0)
62900 JUMP ALF+4
63000 JUMP [=10.0]
63100 MOVEM 0,LUP2
63200 JSA 16,AMOD
63300 JUMP ALF+4
63400 JUMP [=1.0]
63500 FSBR 0,LUP2
63600 FADR 0,ALF+4
63650 MOVE L,MVBX
63700 MOVEM 0,6(L) ;DELETES TAILS WITHOUT REMOVING DOTS OR SPACING OF DOTS.
63800 ; FRACTIONAL NOTE #
63900 MOVE R,MVBEAM ;195 RA=RC-RE
64000 FSBR R,ALF+3
64100 MOVE J,IK ;IF(X.EQ.2)RA=-RA
64200 CAIN J,2
64300 MOVNS R
64400 SKIPN R ;IF(RA.EQ.0)RA=999.
64500 MOVE R,[=999.0]
64600 MOVEM R,7(L) ;196 RN(L+8)=RA
64700 ; FRACTIONAL NOTE # - FIRST NOTE OF GROUP + THIS NOTE # ALL *7.
64800 ;; MOVE NX,DPYNEW ;IF(JJ2)JJ2=N
64900 SKIPGE POSI+=8
65000 MOVEM NX,POSI+=8 ; SAVES # OF FIRST ITEM FOUND
65100 HX192: CAMGE NX,PTR+=250 ;192 CONTINUE
65200 AOJA NX,H192
65300 HX191: MOVE K,LOOP ;191 CONTINUE
65400 CAMGE K,PTR+=250
65500 AOJA K,H191
65600 JRA 16,(16) ;RETURN
65700
65800 H9: SKIPGE .COMM.+=32 ;9 IF(J11.LT.0)RETURN
65900 JRA 16,(16) ; IF P11=-1 NO HOMING
66000 MOVE R,.COMM.+=8 ; X=R7/10.
66100 FDVR R,[=10.0]
66200 FIXX(R)
66300 SKIPGE R ;IF(X)X=-X
66400 MOVNS R
66500 MOVEM R,IK ;X SAVED IN IK
66600 ; X IS STEM DIRECTION
66700 MOVE L,.COMM.+=10 ;RA=R9
66800 ; R9= POS3
66900 MOVNI RC,1 ;RC=-1
67000 SKIPE L ;IF(R9.NE.0)RC=-2
67100 MOVNI RC,2
67200 MOVE J,.COMM.+=31 ;IF(J10/10.EQ.3)RC=-3
67300 IDIVI J,=10
67400 CAIN J,3
67500 MOVNI RC,3 ; RC=0 ESCAPES FRCOM LOOP.
67510 ;;; JRST HZ10
67520 ;;;H10: SETZ RC, ;FOR P13=1
67600 ; HOMING RANGE FOR BEAMS
67700 ;;;HZ10: MOVE IS,.COMM.+=12 ;10 IF(R11.EQ.0)R11=2.9
67710 H10: MOVE IS,.COMM.+=12 ;10 IF(R11.EQ.0)R11=2.9
67800 JUMPN IS,HX10
67900 MOVE IS,[=2.9]
68000 MOVEM IS,.COMM.+=12 ; IF P11.NE.0 RANGE IS CHANGED FROM 2
68100 HX10: MOVE IZ,.COMM.+1 ; IF(JA.EQ.5)RC=-1
68200 CAIN IZ,5
68300 MOVNI RC,1
68400 MOVEI K,1
68500 H361: JSA 16,FINDIT ;DO 361 K=1,ITEM
68600 JUMP K
68700 JUMPL 0,HX361 ;IF(FINDIT(K))GO TO 361
68800 ; SKIPS NOTES ON WRONG LINE
68900 MOVEI R,XRN ;RD=RN(L+3)
69000 ADD R,PTR+=251 ;LOC OF RN(L+1)
69100 MOVE A,2(R) ;RD IN A
69200 MOVEM A,XRN+=3999 ;1 IF(JA.NE.6)GO TO 177
69300 MOVE J,.COMM.+1
69400 CAIE J,6
69500 JRST H177
69600 MOVE J,4(R) ;IF(IFIX(RN(L+5)/10).NE.X)GO TO 361
69700 FDVR J,[=10.0]
69800 FIXX(J)
69900 CAME J,IK
70000 JRST HX361
70100 H177: JSA 16,PLACE ;177 IF(PLACE(R3))GO TO 461
70200 JUMP .COMM.+4
70300 JUMPL H461
70400 MOVEM A,.COMM.+4 ;R3=RD
70500 ; LOOKS FOR NOTE, STAFF #, STEM DIR.
70600 MOVE J,.COMM.+1 ;IF(JA.EQ.6)GO TO 861
70700 CAIN J,6
70800 JRST H861
70900 CAIN J,5 ;IF(JA.EQ.5)GO TO 261
71000 JRST H261
71100 JRA 16,(16) ;RETURN
71200 H461: MOVE J,.COMM.+1 ;461 IF(JA.EQ.6)GO TO 277
71300 CAIN J,6
71400 JRST H277
71500 CAIE J,5 ;IF(JA.NE.5)GO TO 361
71600 JRST HX361
71700 H277: JSA 16,PLACE ;277 IF(PLACE(R6))GO TO 561
71800 JUMP .COMM.+7
71900 JUMPL H561
72000 MOVEM A,.COMM.+7 ;R6=RD
72100 H861: MOVE 0,.COMM.+=28 ;861 IF(J7.GE.0)GO TO 261
72200 JUMPGE 0,H261
72300 H561: JSA 16,PLACE ;561 IF(PLACE(RA))GO TO 661
72400 JUMP L
72500 JUMPL H661
72600 MOVE 0,.COMM.+=28 ;IF(J7)GO TO 761
72700 JUMPL H761 ; J7=NEG MEANS TREMOLO
72800 MOVE 0,.COMM.+=9 ; IF(R8.NE.0)GO TO 761
72900 JUMPN H761
72910 MOVE 0,.COMM.+=11 ; IF(R10.EQ.0)GO TO 361
72920 JUMPE HX361
73000 H761: MOVEM A,.COMM.+=10 ;761 R9=RD
73100 ; R8=0, R10=0 MEANS R9 IS NUMBER OUTSIDE OF BEAM.
73200 JRST H261 ;GO TO 261
73300 H661: CAIN J,5 ;661 IF(JA.EQ.5)GO TO 361
73400 JRST HX361
73500 MOVE 0,.COMM.+=31 ;IF(J10.LT.30)GO TO 361
73600 CAIGE 0,=30
73700 JRST HX361
73800 JSA 16,PLACE ;IF(PLACE(R8))GO TO 361
73900 JUMP .COMM.+=9
74000 JUMPL HX361 ; HOMES INNER PARTIAL BEAMS
74100 MOVEM A,.COMM.+=9 ;R8=RD
74200 H261: SKIPN RC ;261 IF(RC.EQ.0)RETURN
74300 JRA 16,(16)
74400 AOJ RC ;RC=RC+1
74500 HX361: CAMGE K,PTR+=250 ;361 CONTINUE
74600 AOJA K,H361
74700 JRA 16,(16) ; END
74800
75100 ; CALL FSCAN
75200 ; GOTO RT
75300 ; GOTO LF
75400 ; GOTO UP
75500 ; GOTO DW
75600 ; GOTO 1/2
75700 ; GOTO *2
75800 ; GOTO X
75900 ; GOTO C
76000 ; ALL OTHERS(EXIT)
76100
76200 FSCAN: 0
76300 INCHRW
76400 CAIN ";"
76500 JRA 16,(16)
76600 CAIN ":"
76700 JRA 16,1(16)
76800 CAIN "("
76900 JRA 16,2(16)
77000 CAIN ")"
77100 JRA 16,3(16)
77200 CAIN "/"
77300 JRA 16,4(16)
77400 CAIN "*"
77500 JRA 16,5(16)
77600 CAIN "X"
77700 JRA 16,6(16)
77800 CAIN "C"
77900 JRA 16,7(16)
78000 JRA 16,8(16)
78100 END